import {  loadEnv, ConfigEnv, UserConfig } from "vite";
import { resolve } from 'path'
import { wrapperEnv } from "./build/getEnv";
import { createProxy } from "./build/proxy";
import { createVitePlugins } from "./build/plugins";
import { createViteGlobalVar } from "./build/globalVar";


// https://vitejs.dev/config/
// 可以使用 defineConfig 工具函数，这样不用 jsdoc 注解(类似ts)也可以获取类型提示
// 箭头函数写法是mock要求的写法
// command：构建命令（build,serve） mode：构建环境（development"（开发模式）和 "production"（生产模式））
//ssrBuild 当 ssrBuild 的值为 true 时，表示当前的构建过程是用于服务器端渲染的构建。（experimental：这个注释标记表示该属性是一个实验性的特性。）
export default ({ command,mode }:ConfigEnv):UserConfig => {
  // 获取当前工作目录的路径，并将其赋值给常量root
  const root = process.cwd();
  //将环境变量的值注入到 Vite 的配置中。它的作用是解析一个包含环境变量定义的文件，并将这些变量以对象的形式返回。
  //包含了从 .env 文件中加载的环境变量。具体属性取决于 .env 文件中定义的变量。
  const env = loadEnv(mode, root);
  const viteEnv = wrapperEnv(env);
  return {
    plugins: createVitePlugins(command,viteEnv),
    // envPrefix:"APP_",//APP_  为自定义开头名，默认为
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'),
      },
      extensions: ['.ts', '.vue', '.js', '.jsx', '.tsx'], // 导入时想要省略的扩展名列表。
    },
    //定义全局的常量。
    define: {
      __APP_INFO__: createViteGlobalVar()
    },
    css: {
      preprocessorOptions: {
        scss: {
          // 启用对 JavaScript 的支持
          javascriptEnabled: true,
          // 使用这个文件定义的变量,@use引入，sass 团队说他们最终会删除 @import 语法。
          additionalData: '@use "./src/styles/var.scss";',
        },
      },
    },
    server: {
      //host设置为 0.0.0.0 或 true 会监听所有地址，包括局域网和公共地址。
      host: "0.0.0.0",
      port:viteEnv.VITE_PORT,
      // open:true,//或者package.json， "dev": "vite --open",
      proxy:  createProxy(viteEnv.VITE_PROXY)
    },
    build: {
      // 不生成源代码映射文件
      sourcemap: false,
      // 消除打包大小超过500kb警告,打包后的单个chunk大小超过4000kb时，才会会发出警告
      chunkSizeWarningLimit: 4000,
    },
    
  }
}
